El Paradoja del rendimiento establece que un núcleo matemáticamente perfecto, como $out = x + y$, puede funcionar peor que un bucle en CPU si no logra amortizar los costos fijos del hardware de GPU. Esto suele manifestarse como el Impuesto de lanzamiento.
1. El error de la "correctitud"
La corrección funcional no es un indicador de eficiencia. Aunque tu código de Triton pueda distribuir correctamente el trabajo entre miles de hilos, si la cantidad total de trabajo (N) es pequeña, la GPU permanece subutilizada. El hardware gasta más tiempo en transiciones de estado que en operaciones aritméticas reales.
2. La trampa de medición en Python
Medir el rendimiento del código para GPU desde Python usando time.time() es peligroso. Las llamadas a GPU son asincrónicas; Python simplemente coloca en cola la orden y continúa. Sin torch.cuda.synchronize(), mides el tiempo de cola. Con sincronización, mides el latencia de host a dispositivo, que suele ser 10 veces mayor que la ejecución misma del núcleo.
3. Latencia frente a rendimiento
Para superar la paradoja, debes proporcionar suficiente trabajo para "ocultar" la latencia de lanzamiento. Este es el paso de un régimen limitado por latencia (limitado por el bus CPU-GPU) a un régimen limitado por rendimiento (limitado por la memoria o el cálculo de GPU).